package br.com.dallasmotopecas.compra.promocao.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.promocao.controller.PromocaoTipoController;
import br.com.dallasmotopecas.comum.promocao.vo.PromocaoTipoVo;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="managerPromocaoTipoBean")
@ViewScoped
public class ManagerPromocaoTipoBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private PromocaoTipoVo promocaoTipoVo;
	private List<PromocaoTipoVo> listaTipo;
	
	public ManagerPromocaoTipoBean()
	{
		
	}
	
	@PostConstruct
	public void initialize()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
			carregarDados();
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		setPromocaoTipoVo(null);
		
		if (getListaTipo() != null)
		{
			getListaTipo().clear();
			setListaTipo(null);
		}
	}

	public PromocaoTipoVo getPromocaoTipoVo()
	{
		if (promocaoTipoVo == null) promocaoTipoVo = new PromocaoTipoVo();
		
		return promocaoTipoVo;
	}

	public void setPromocaoTipoVo(PromocaoTipoVo promocaoTipoVo)
	{
		this.promocaoTipoVo = promocaoTipoVo;
	}

	public List<PromocaoTipoVo> getListaTipo()
	{
		if (listaTipo == null) listaTipo = new ArrayList<PromocaoTipoVo>();
		
		return listaTipo;
	}

	public void setListaTipo(List<PromocaoTipoVo> listaTipo)
	{
		this.listaTipo = listaTipo;
	}
	
	public void carregarDados()
	{
		PromocaoTipoController promocaoTipoController = null;
		try
		{
			promocaoTipoController = new PromocaoTipoController(getContexto());
			promocaoTipoController.carregarListaTipo(getListaTipo());
		}
		catch(ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (promocaoTipoController != null)
			{
				promocaoTipoController.close();
				promocaoTipoController = null;
			}
		}
	}
	
	public void novoTipo()
	{
		setPromocaoTipoVo(new PromocaoTipoVo());
		abrirModal("tipoPromocaoDialog");
	}
	
	public void alterarTipo(PromocaoTipoVo promocaoTipoVo)
	{
		setPromocaoTipoVo(promocaoTipoVo);
		abrirModal("tipoPromocaoDialog");
	}
	
	public void gravar()
	{
		PromocaoTipoController promocaoTipoController = null;
		try
		{
			promocaoTipoController = new PromocaoTipoController(getContexto());
			
			if (getPromocaoTipoVo().getId() == 0)
				promocaoTipoController.inserirTipo(getPromocaoTipoVo());
			else
				promocaoTipoController.alterarTipo(getPromocaoTipoVo());
			
			carregarDados();
			
			fecharModal("tipoPromocaoDialog");
			
		}
		catch(InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (AlterarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (promocaoTipoController != null)
			{
				promocaoTipoController.close();
				promocaoTipoController = null;
			}
		}
	}
	
	public void sair()
	{
		try
		{
			redirecionarPagina("/view/compra/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
		}
	}
}
